package com.wyw.design.model.learning.structure.flyweight;

import java.util.HashMap;

/**
 * @Title       享元工厂
 * @Description
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2023/3/30 18:05
 * Update History:
 * Author        Time            Content
 */
public class ExamInfoFactory {

    // 对象池，用来支持细粒度对象的复用
    // 使用一个 map 对象来实现池的功能，通过科目我们可以获取池中的某个考试信息实例，如果存在则直接从池中获取返回
    // 如果不存在，我们会手动 new 一个考试信息，然后再将其放入池中，之后再返回。
    private static HashMap<String, ExamInfo> pool = new HashMap<>();

    public static ExamInfo getExamInfo(String subject) {
        // 设置返回的对象
        ExamInfo examInfo = null;
        if (!pool.containsKey(subject)) {
            System.out.println("建立对象，并放到池中..." + subject);
            examInfo = new ExamInfo(subject);
            pool.put(subject, examInfo);
        } else {
            examInfo = pool.get(subject);
            System.out.println("直接从池中获取..." + subject);
        }
        return examInfo;
    }
}
